const fs = require('fs')
const path = require('path')

module.exports = (baseUrl) => async (ctx,next) => {
    let filename = path.join(baseUrl, ctx.path)

    // 处理 404 页面
    await new Promise((resolve,reject) => {
        fs.stat(filename,(err,stats)=>{
            if(err){
                ctx.res.writeHead(200,{
                    'Content-Type':'text/html;charset=utf-8',
                }).end('404页面')
                return next()
            }
            if(stats.isDirectory()){
                ctx.res.writeHead(200,{
                    'Content-Type':'text/html;charset=utf-8',
                }).end(`${filename} 是文件夹`)
                return next()
            }
            resolve()
        })
    })

    // 处理文件文档类型
    let ext = ctx.path.split('.').pop() || '';
    switch(ext){
        case 'css':
            ctx.res.setHeader('Content-Type','text/css')
            break;
        case 'js':
            ctx.res.setHeader('Content-Type','application/javascript')
            break;
        case 'html':
            ctx.res.setHeader('Content-Type','text/html; charset=utf-8')
            break;
        }
    
    // 1. 同步处理，返回 buffer
    // fs.readFile(filename, 'utf8', (err,data)=>{
    //     debugger
    //     if(err) throw err;
    //     // console.log(data);
    //     ctx.res.end(data)
    //     // ctx.body = data
    //     debugger
    // })

    // 2. 异步处理，增加 encoding 选项返回字符串，否则返回 buffer
    // let stream = fs.readFileSync(filename,{encoding:'utf-8'})
    // // ctx.res.end(stream)
    // ctx.body = stream
    // console.log(stream);
    // debugger

    // 3. createReadSream
    ctx.body = fs.createReadStream(filename)
    // debugger
}